Efforts to increase speed and throughput of various systems, specifically packet switching systems, involve using circulating pointers. These systems store data at an address pointed to by a circulating pointer, and then switch the pointer instead of switching the data through the system. Circulating pointer schemes increase switching speed because less data is being moved through the system (i.e., a pointer instead of an entire packet).
For example, the high bandwidth packet switch according to the invention of related U.S. Pat. No. 5,291,482 to McHarg et al., comprises a plurality of input ports, each comprising a first plurality of time slots; a plurality of output ports, each comprising a second plurality of time slots; and a plurality of message buffers, each being equal to or greater than the size of the largest expected message; all of which are interconnected by a bus. A buffer manager connected to the input ports and the output ports selects a circulating pointer which points to one of the message buffers in response to notification of receipt of an incoming packet during one or more time slots on one of the input ports. The buffer manager delivers the selected pointer to the receiving input port, the input port saves a destination address from the message and uses the circulating pointer to write the incoming message from the incoming time slot(s) to the selected message buffer.
When the write to the message buffer is completed, the input port delivers the circulating pointer and the destination address to a router connected to the input ports and the output ports. The router selects one of the plurality of output ports responsive to the destination address, and delivers the circulating pointer to the selected output port. The output buffer uses the circulating pointer to retrieve the message from the message buffer and then transmits the message through the appropriate time slot(s). The output port then delivers the circulating pointer to the buffer manager for reuse.
In the above-described system, or in a software system that uses circulating pointers, there is a risk that a circulating pointer may become duplicated or lost. A small voltage change, component weakness, programming error, or the like, which occur regularly in large, complex systems, can affect one bit or many bits in a pointer, which causes duplication or loss of a pointer. If a circulating pointer is lost, then there is a memory resource that cannot be accessed. If a circulating pointer is duplicated, then multiple writes occur to the same location in memory, and data is directed to the wrong destination or corrupted.
Therefore, a problem in the art is that there is no method for enforcing the validity of circulating pointers.